package logica.DAO;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import objetosNegocio.ListaProductos;
import objetosNegocio.Producto;

public class DAOProducto implements InterfazDAOProducto{

	private DAOConnection connection; //Conexion a BBDD
	
	/**
	 * @param connection - Objeto que encapsula la conexion a la bbdd
	 */
	public DAOProducto(DAOConnection connection){
		this.connection = connection;
	}

	@Override
	public boolean insertarRegistro(Producto datos) throws SQLException {
		boolean insertado = false;
		Statement stmt = null;
				
		String sentenciaSQL = "";  		//Siempre se inserta el registro como activo (valor 0)
		sentenciaSQL = "INSERT INTO gesal.Producto (idProducto,nombre,familia,descripcion,activo) VALUES (";
		sentenciaSQL+= "NULL," + "\"" + datos.getNombre() +  "\"," + datos.getFamilia() + ",\"" ; 
		sentenciaSQL+= datos.getDescripcion() + "\",0)";

		stmt = connection.getConnection().createStatement();
		if ((stmt.executeUpdate(sentenciaSQL))==1) insertado=true;
		stmt.close();
		
		return insertado;
	}

	
	@Override
	public boolean modificarRegistro(Producto datos) throws SQLException {
		boolean modificado = false;
		Statement stmt = null;
		
		int activo = datos.getActivo()? 0 : 1; //Pasamos de boolean a int
		
		String sentenciaSQL = "";
		sentenciaSQL = "UPDATE gesal.Producto SET";
		sentenciaSQL+= " nombre=\"" + datos.getNombre() + "\",";
		sentenciaSQL+= " familia=" + datos.getFamilia() + ",";
		sentenciaSQL+= " descripcion=\"" + datos.getDescripcion() + "\",";
		sentenciaSQL+= " activo=\"" + activo + "\"";
		sentenciaSQL+= " WHERE idProducto=" + datos.getIdProducto();
		
		stmt = connection.getConnection().createStatement();
		if ((stmt.executeUpdate(sentenciaSQL))==1) modificado=true;
		stmt.close();
		
		return modificado;
	}

	
	@Override
	public boolean bajaRegistro(int codigo) throws SQLException {
		boolean baja = false;
		Statement stmt = null;
		
		String sentenciaSQL = "";
		sentenciaSQL = "UPDATE gesal.Producto SET activo=1 WHERE idProducto=" + codigo;
		
		stmt = connection.getConnection().createStatement();
		if ((stmt.executeUpdate(sentenciaSQL))==1) baja=true;
		stmt.close();

		return baja;
	}

	@Override
	public Producto obtenerRegistro(int codigo) throws SQLException {
		ResultSet resul = null;
		Statement stmt = null;
		Producto datos = null;
		
		String sentenciaSQL = "";
		sentenciaSQL = "SELECT idProducto,nombre,familia,descripcion,activo";
		sentenciaSQL+= " FROM gesal.Producto WHERE idProducto=" + codigo;
		
		stmt = connection.getConnection().createStatement();
		resul = stmt.executeQuery(sentenciaSQL);
		
		//Si se encuentra el registro se tratan los datos
		if (resul.next()){  
			datos= new Producto();	
			datos.setIdProducto(resul.getInt("idProducto"));
			datos.setNombre(resul.getString("nombre"));
			datos.setFamilia(resul.getInt("familia"));
			datos.setDescripcion(resul.getString("descripcion"));
			datos.setActivo((resul.getInt("activo")==0));
		}
		
		resul.close();
		stmt.close();
		return datos;
	}

	@Override
	public ListaProductos obtenerListaRegistros() throws SQLException {
		return obtenerListado(false);
	}
	
	
	@Override
	public ListaProductos obtenerListaRegistrosActivos() throws SQLException {
		return obtenerListado(true);
	}

	
	
	private ListaProductos obtenerListado(boolean soloActivos) throws SQLException{
		ResultSet resul = null;
		Statement stmt = null;
		
		Producto datos = null;
		ListaProductos listado = new ListaProductos();
		
		String sentenciaSQL = "";
		sentenciaSQL = "SELECT idProducto,nombre,familia,descripcion,activo FROM gesal.Producto";
		
		if (soloActivos)
			sentenciaSQL+= " WHERE activo=0";
		
		stmt = connection.getConnection().createStatement();
		resul = stmt.executeQuery(sentenciaSQL);
		
		//Si se encuentra el registro se tratan los datos
		while (resul.next()){  
			datos= new Producto();	
			datos.setIdProducto(resul.getInt("idProducto"));
			datos.setNombre(resul.getString("nombre"));
			datos.setFamilia(resul.getInt("familia"));
			datos.setDescripcion(resul.getString("descripcion"));
			datos.setActivo((resul.getInt("activo")==0));
			listado.add(datos);
		}
		
		resul.close();
		stmt.close();
		return listado;
	}
	
}
